const jwt = require('jsonwebtoken');
const {User} = require('../models');
const {UnauthorizedError} = require('../utils/errors');
const {success,failure} = require('../utils/responses');

module.exports = async(req,res,next)=>{
    try{
        const {token} = req.headers;
        if(!token){
            throw new UnauthorizedError('当前接口需要认证才能访问');
        }
        // 验证 token 是否正确
        const decoded = jwt.verify(token, process.env.SECRET);
        // 从 jwt 中，解析出之前存入的 userId
        const {userId} = decoded;
        const user = await User.findByPk(userId);
        //查询是否存在该用户
        if(!user){
            throw new UnauthorizedError('用户不存在');
        }
        //查询该用户是否为管理员
        if(user.role!==100){
            throw new UnauthorizedError('非管理员账号无法使用该接口');
        }
        // 如果通过验证，将 user 对象挂载到 req 上，方便后续中间件或路由使用
        req.user = user;
        // 一定要加 next()，才能继续进入到后续中间件或路由
        next();
    }catch(err){
        failure(res,err);
    }
};